package com.qf.test;

import com.qf.proxy.ZhongJieProxy;
import com.qf.service.FangDongService;
import com.qf.service.FangDongServiceImpl;
import org.junit.Test;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class testProxy {
    /**
     * 测试静态代理实现租客租房子
     */
    @Test
    public void TestStaticProxyZuKeZuFangzi() {

        ZhongJieProxy zhongJieProxy = new ZhongJieProxy();
        zhongJieProxy.zuFang();
    }

    @Test
    /**
     * 使用jdk动态代理实现, 租客租房子
     */
    public void testJdkProxyZuFangzi() {
//        创建房东租房核心对象
        final FangDongService fangDongService = new FangDongServiceImpl();
//        创建jdk  中的代理对象的拦截器 指定额外功能
        InvocationHandler invocationHandler = new InvocationHandler() {
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("======帮房东打扫卫生======");
                System.out.println("======帮房东带租客看房======");
                System.out.println("======帮房东草拟合同======");
//               调用房东原有方法
                fangDongService.zuFang();
                return null;
            }
        };

//        创建JDK 中代理对象 执行代理
        FangDongService o = (FangDongService) Proxy.newProxyInstance(testProxy.class.getClassLoader(), fangDongService.getClass().getInterfaces(), invocationHandler);
        o.zuFang();
    }
}